
<template>
  <div class="common-layout">
    <el-container>
      
      <el-header  class="header">
        <el-page-header  @back="onBack">
          <template #content>
            <span > {{this.reportDetail.html_report_name}}接口测试报告 </span>
          </template>
        </el-page-header>
      </el-header>
        <el-row :gutter="10">
          <el-col :span="8">
            <el-card class="custom-card" >
              <template #header>
                  <h2>                    
                    <span>执行结果</span>
                    <i class="iconfont">&#xe66e;</i>
                  </h2>
              </template>
              <el-row>
                <el-col :span="4"><div class="grid-content ep-bg-purple-dark" />通过用例</el-col>
                <el-col :span="18"><div class="grid-content ep-bg-purple-dark" />
                  <el-progress
                    :percentage="reportDetail.stat.successes/reportDetail.stat.testsRun *100"
                    :stroke-width="15"
                    status="success"
                    striped
                    striped-flow
                    :duration="10"
                  >
                  <span>{{this.reportDetail.stat.successes}}</span>
                </el-progress>
                </el-col>
              </el-row>
              <el-row>
                <el-col :span="4"><div class="grid-content ep-bg-purple-dark" />失败用例</el-col>
                <el-col :span="18"><div class="grid-content ep-bg-purple-dark" />
                  <el-progress
                   :percentage="reportDetail.stat.errors/reportDetail.stat.testsRun *100"
                    :stroke-width="15"
                    status="exception"
                    :duration="10"
                  >
                  <span>{{this.reportDetail.stat.errors}}</span>
                  </el-progress>
                </el-col>
              </el-row>
                
            </el-card>
          </el-col>
          <el-col :span="15">
            <el-card class="custom-card2" shadow="hover">
              <el-descriptions
                title="运行信息"
                direction="vertical"
                :column="4"
                :size="size"
                border
              >
                <el-descriptions-item label="请求时间">{{$datetimeFormat(this.reportDetail.time.start_at)}}</el-descriptions-item>
                <el-descriptions-item label="运行时长">{{this.reportDetail.time.duration}} s</el-descriptions-item>
                <el-descriptions-item label="测试人员" :span="2">Suzhou</el-descriptions-item>
                <el-descriptions-item label="httprunner_version">
                  <el-tag size="small">httprunner_version {{this.reportDetail.platform.httprunner_version}}</el-tag>
                </el-descriptions-item>
                <el-descriptions-item label="httprunner_version">
                  <el-tag size="small">python_version {{this.reportDetail.platform.python_version}}</el-tag> 
                </el-descriptions-item>
                <el-descriptions-item label="httprunner_version">
                  <el-tag size="small">platform {{this.reportDetail.platform.platform}}</el-tag>
                </el-descriptions-item>
              </el-descriptions>
            </el-card>
          </el-col>

        </el-row>
      <el-row :gutter="10">
        <el-col :span="5">
          <el-card class="custom-card-row2" >
            <template #header>
                <h2>                    
                  <span>接口 用例</span>
                  <i class="iconfont">&#xe66e;</i>
                </h2>
            </template>
            <div v-for="items in this.reportDetail.details" :key="items">
              <el-button size="large" class="button-item" v-for="(item,index) in items.records" :key="item"  @click="choseCase(index)" color="#626aef" :dark="isDark" plain>
                {{item.name }}
              </el-button>


            </div>
          </el-card>
        </el-col>
        <el-col :span="19">
          <el-card class="detail-card" shadow="hover">
            <template #header>
                <h2>                    
                  <span>运行详情</span>
                  <i class="iconfont">&#xe66e;</i>
                </h2>
            </template>
            <el-row :gutter="10">
                <el-col :span="2" align="left">Status</el-col>
                <el-col :span="4" align="left">Params</el-col>
                <el-col :span="16" align="left">Details</el-col>
              </el-row>
            <div class="detail">
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">url</el-col>
                <el-col :span="16" align="left">{{this.meta_data.request.url}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">method</el-col>
                <el-col :span="16" align="left">{{this.meta_data.request.method}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">headers</el-col>
                <el-col :span="16" align="left">{{this.meta_data.request.headers}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">status_code</el-col>
                <el-col :span="16" align="left">{{this.meta_data.response.status_code}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">setup_hooks_start</el-col>
                <el-col :span="16" align="left">{{this.meta_data.request.setup_hooks_start}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">setup_hooks_duration</el-col>
                <el-col :span="16" align="left">{{this.meta_data.request.setup_hooks_duration}}</el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">json</el-col>
                <el-col :span="16" align="left">
                  <el-input
                    class="transparent-bg"
                    v-model="this.meta_data.request.json"
                    autosize
                    readonly
                    resize="none"
                    type="textarea"
                    placeholder="None"
                  />
                </el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">body</el-col>
                <el-col :span="16" align="left">
                  <el-input
                    v-model="this.meta_data.request.body"
                    autosize
                    readonly
                    resize="none"
                    type="textarea"
                    placeholder="null"
                  />
                </el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">response</el-col>
                <el-col :span="16" align="left">
                  <el-descriptions column="1" border >
                    <el-descriptions-item label="status_code"><el-text  type="primary">{{this.meta_data.response.status_code}}</el-text></el-descriptions-item>
                    <el-descriptions-item label="headers"><el-text  type="primary">{{this.meta_data.response.headers}}</el-text></el-descriptions-item>
                    <el-descriptions-item label="response_time_ms"><el-text type="primary">{{this.meta_data.response.response_time_ms}}</el-text></el-descriptions-item>
                    <el-descriptions-item label="encoding"><el-text type="primary">{{this.meta_data.response.encoding}}</el-text></el-descriptions-item>
                    <el-descriptions-item label="content"><el-text type="primary">{{this.meta_data.response.content}}</el-text></el-descriptions-item>
                  </el-descriptions>
                </el-col>
              </el-row>
              <el-divider />
              <el-row :gutter="10">
                <el-col :span="2" align="left">
                  <div >
                    <el-icon><CoffeeCup /></el-icon>
                  </div>
                </el-col>
                <el-col :span="4" align="left">Logs</el-col>
                <el-col :span="16" align="left">
                <ul v-for="item in this.meta_data.logs" :key="item">
                  <li><el-text class="mx-1" type="success" size="large">{{ item }}</el-text></li>
                </ul>
                </el-col>
              </el-row>
            </div>

            <!-- <el-collapse accordion>
              <el-collapse-item :name="index" v-for="(item,index) in this.request" :key="item">
                <template #title>
                  {{item.param}}
                  <el-icon class="header-icon">
                    <info-filled />
                  </el-icon>
                </template>
                <div>
                    {{ item.value}}
                </div>
              </el-collapse-item>
            </el-collapse> -->
          </el-card>
        </el-col>

      </el-row>
    </el-container>
  </div>
</template>

<script>
export default {
data(){
    return{
          reportDetail:{
            "success": true,
            "stat": {
              "testsRun": 1,
              "failures": 0,
              "errors": 0,
              "skipped": 0,
              "expectedFailures": 0,
              "unexpectedSuccesses": 0,
              "successes": 1
            },
            "time": {
              "start_at": 1704801089.4546483,
              "setup_hooks_duration": 0,
              "teardown_hooks_duration": 0.020357847213745117,
              "duration": 0.115
            },
            "platform": {
              "httprunner_version": "1.5.15",
              "python_version": "CPython 3.9.17",
              "platform": "Linux-5.15.0-91-generic-x86_64-with-glibc2.28"
            },
            "details": [
              {
                "success": false,
                "stat": {
                  "testsRun": 5,
                  "failures": 0,
                  "errors": 5,
                  "skipped": 0,
                  "expectedFailures": 0,
                  "unexpectedSuccesses": 0,
                  "successes": 0
                },
                "time": {
                  "start_at": 1704809762.665914,
                  "setup_hooks_duration": 0,
                  "teardown_hooks_duration": 0,
                  "duration": 0
                },
                "records": [
                  {
                    "name": "登录-成功",
                    "status": "error",
                    "attachment": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 156, in _new_conn\n    conn = connection.create_connection(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 84, in create_connection\n    raise err\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 74, in create_connection\n    sock.connect(sa)\n  File \"/usr/local/lib/python3.9/site-packages/gevent/_socketcommon.py\", line 613, in connect\n    self._wait(self._write_event)\n  File \"src/gevent/_hub_primitives.py\", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 313, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 314, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_waiter.py\", line 154, in gevent._gevent_c_waiter.Waiter.get\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_gevent_c_greenlet_primitives.pxd\", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch\nsocket.timeout: timed out\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 665, in urlopen\n    httplib_response = self._make_request(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 387, in _make_request\n    conn.request(method, url, **httplib_request_kw)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1285, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1331, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1280, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1040, in _send_output\n    self.send(msg)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 980, in send\n    self.connect()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 184, in connect\n    conn = self._new_conn()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 161, in _new_conn\n    raise ConnectTimeoutError(\nurllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f52250ead90>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)')\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 439, in send\n    resp = conn.urlopen(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 719, in urlopen\n    retries = retries.increment(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py\", line 436, in increment\n    raise MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52250ead90>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/app/httprunner/api.py\", line 61, in test\n    test_runner.run_test(teststep_dict)\n  File \"/app/httprunner/runner.py\", line 275, in run_test\n    resp = self.http_client_session.request(\n  File \"/app/httprunner/client.py\", line 156, in request\n    self.meta_data[\"response\"][\"ok\"] = response.ok\n  File \"/usr/local/lib/python3.9/site-packages/requests/models.py\", line 702, in ok\n    self.raise_for_status()\n  File \"/app/httprunner/client.py\", line 29, in raise_for_status\n    raise self.error\n  File \"/app/httprunner/client.py\", line 207, in _send_request_safe_mode\n    return requests.Session.request(self, method, url, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 533, in request\n    resp = self.send(prep, **send_kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 646, in send\n    r = adapter.send(request, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 504, in send\n    raise ConnectTimeout(e, request=request)\nrequests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52250ead90>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n",
                    "meta_data": {
                      "request": {
                        "url": "http://192.168.1.4:8500/api/user/login/",
                        "method": "POST",
                        "headers": {
                          "Content-Length": "0"
                        },
                        "start_timestamp": 1704809762.6813183,
                        "setup_hooks_start": 1704809762.6773984,
                        "setup_hooks_duration": 0,
                        "json": {
                          "username": "qa1",
                          "password": "gg9tKGBjK8GEgg9tKGBjK8GE"
                        },
                        "verify": false,
                        "body": null
                      },
                      "response": {
                        "status_code": "N/A",
                        "headers": {},
                        "content_size": "N/A",
                        "response_time_ms": 120003.83,
                        "elapsed_ms": 0,
                        "encoding": null,
                        "content": null,
                        "content_type": ""
                      },
                      "validators": [],
                      "logs": [
                        "INFO [2024-01-09 22:16:02,672] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:16:02,674] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:16:02,675] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:16:02,676] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:16:02,677] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:16:02,678] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:16:02,680] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:267]:  POST /api/user/login/",
                        "INFO [2024-01-09 22:16:28,416] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:730]:  source string content: $token",
                        "INFO [2024-01-09 22:16:28,417] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:733]:  parsed string content: ${get_token()}",
                        "INFO [2024-01-09 22:16:28,419] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:618]:  raw func_params_str:  ",
                        "INFO [2024-01-09 22:16:28,420] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:620]:  function_meta: {'args': [], 'kwargs': {}}",
                        "INFO [2024-01-09 22:16:28,421] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:626]:  parsed func: get_token()",
                        "INFO [2024-01-09 22:16:28,501] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:628]:  func return value: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc4OCwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3ODh9.qTbfm_cwQJABssBHSOUAp60mm7aFG4mnn9UX0y-PSDc",
                        "INFO [2024-01-09 22:16:28,503] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:618]:  raw func_params_str:  ",
                        "INFO [2024-01-09 22:16:28,504] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:620]:  function_meta: {'args': [], 'kwargs': {}}",
                        "INFO [2024-01-09 22:16:28,505] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:626]:  parsed func: get_none()",
                        "INFO [2024-01-09 22:16:28,507] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_string:628]:  func return value: None",
                        "INFO [2024-01-09 22:16:28,509] [723470c337ac40e98ce259c2f3f342ee] httprunner [api.py->_run_suite:137]:  ??? Start to run testcase: 登录-成功",
                        "INFO [2024-01-09 22:16:28,510] [723470c337ac40e98ce259c2f3f342ee] httprunner [report.py->startTest:219]:  登录-成功",
                        "INFO [2024-01-09 22:16:28,512] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:16:28,513] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:16:28,514] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:16:28,516] [723470c337ac40e98ce259c2f3f342ee] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:16:28,517] [723470c337ac40e98ce259c2f3f342ee] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:16:28,518] [723470c337ac40e98ce259c2f3f342ee] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:16:28,519] [723470c337ac40e98ce259c2f3f342ee] httprunner [runner.py->run_test:267]:  POST /api/user/login/"
                      ],
                      "extractors": []
                    }
                  },
                  {
                    "name": "登录-成功",
                    "status": "error",
                    "attachment": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 156, in _new_conn\n    conn = connection.create_connection(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 84, in create_connection\n    raise err\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 74, in create_connection\n    sock.connect(sa)\n  File \"/usr/local/lib/python3.9/site-packages/gevent/_socketcommon.py\", line 613, in connect\n    self._wait(self._write_event)\n  File \"src/gevent/_hub_primitives.py\", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 313, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 314, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_waiter.py\", line 154, in gevent._gevent_c_waiter.Waiter.get\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_gevent_c_greenlet_primitives.pxd\", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch\nsocket.timeout: timed out\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 665, in urlopen\n    httplib_response = self._make_request(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 387, in _make_request\n    conn.request(method, url, **httplib_request_kw)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1285, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1331, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1280, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1040, in _send_output\n    self.send(msg)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 980, in send\n    self.connect()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 184, in connect\n    conn = self._new_conn()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 161, in _new_conn\n    raise ConnectTimeoutError(\nurllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f522506a5e0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)')\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 439, in send\n    resp = conn.urlopen(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 719, in urlopen\n    retries = retries.increment(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py\", line 436, in increment\n    raise MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f522506a5e0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/app/httprunner/api.py\", line 61, in test\n    test_runner.run_test(teststep_dict)\n  File \"/app/httprunner/runner.py\", line 275, in run_test\n    resp = self.http_client_session.request(\n  File \"/app/httprunner/client.py\", line 156, in request\n    self.meta_data[\"response\"][\"ok\"] = response.ok\n  File \"/usr/local/lib/python3.9/site-packages/requests/models.py\", line 702, in ok\n    self.raise_for_status()\n  File \"/app/httprunner/client.py\", line 29, in raise_for_status\n    raise self.error\n  File \"/app/httprunner/client.py\", line 207, in _send_request_safe_mode\n    return requests.Session.request(self, method, url, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 533, in request\n    resp = self.send(prep, **send_kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 646, in send\n    r = adapter.send(request, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 504, in send\n    raise ConnectTimeout(e, request=request)\nrequests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f522506a5e0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n",
                    "meta_data": {
                      "request": {
                        "url": "http://192.168.1.4:8500/api/user/login/",
                        "method": "POST",
                        "headers": {
                          "Content-Length": "0"
                        },
                        "start_timestamp": 1704809882.708836,
                        "setup_hooks_start": 1704809882.705131,
                        "setup_hooks_duration": 0,
                        "json": {
                          "username": "qa1",
                          "password": "gg9tKGBjK8GEgg9tKGBjK8GE"
                        },
                        "verify": false,
                        "body": null
                      },
                      "response": {
                        "status_code": "N/A",
                        "headers": {},
                        "content_size": "N/A",
                        "response_time_ms": 120003.03,
                        "elapsed_ms": 0,
                        "encoding": null,
                        "content": null,
                        "content_type": ""
                      },
                      "validators": [],
                      "logs": [
                        "INFO [2024-01-09 22:18:02,695] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:18:02,696] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:18:02,701] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:18:02,703] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:18:02,705] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:18:02,706] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:18:02,707] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:267]:  POST /api/user/login/",
                        "INFO [2024-01-09 22:18:35,163] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:730]:  source string content: $token",
                        "INFO [2024-01-09 22:18:35,164] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:733]:  parsed string content: ${get_token()}",
                        "INFO [2024-01-09 22:18:35,166] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:618]:  raw func_params_str:  ",
                        "INFO [2024-01-09 22:18:35,167] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:620]:  function_meta: {'args': [], 'kwargs': {}}",
                        "INFO [2024-01-09 22:18:35,167] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:626]:  parsed func: get_token()",
                        "INFO [2024-01-09 22:18:35,277] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:628]:  func return value: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTkxNSwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk5MTV9.8IS7zYtywd8UBsBS9rR-KOcubVm_leSzpdPHUv-Su6w",
                        "INFO [2024-01-09 22:18:35,280] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:618]:  raw func_params_str:  ",
                        "INFO [2024-01-09 22:18:35,281] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:620]:  function_meta: {'args': [], 'kwargs': {}}",
                        "INFO [2024-01-09 22:18:35,284] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:626]:  parsed func: get_none()",
                        "INFO [2024-01-09 22:18:35,285] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_string:628]:  func return value: None",
                        "INFO [2024-01-09 22:18:35,287] [0df4a313d48c4ced83934e8aa54bb251] httprunner [api.py->_run_suite:137]:  ??? Start to run testcase: 登录-成功",
                        "INFO [2024-01-09 22:18:35,289] [0df4a313d48c4ced83934e8aa54bb251] httprunner [report.py->startTest:219]:  登录-成功",
                        "INFO [2024-01-09 22:18:35,290] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:18:35,292] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:18:35,294] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:18:35,298] [0df4a313d48c4ced83934e8aa54bb251] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:18:35,299] [0df4a313d48c4ced83934e8aa54bb251] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:18:35,300] [0df4a313d48c4ced83934e8aa54bb251] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:18:35,301] [0df4a313d48c4ced83934e8aa54bb251] httprunner [runner.py->run_test:267]:  GET /api/aweirunner/project/"
                      ],
                      "extractors": []
                    }
                  },
                  {
                    "name": "登录-成功",
                    "status": "error",
                    "attachment": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 156, in _new_conn\n    conn = connection.create_connection(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 84, in create_connection\n    raise err\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 74, in create_connection\n    sock.connect(sa)\n  File \"/usr/local/lib/python3.9/site-packages/gevent/_socketcommon.py\", line 613, in connect\n    self._wait(self._write_event)\n  File \"src/gevent/_hub_primitives.py\", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 313, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 314, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_waiter.py\", line 154, in gevent._gevent_c_waiter.Waiter.get\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_gevent_c_greenlet_primitives.pxd\", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch\nsocket.timeout: timed out\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 665, in urlopen\n    httplib_response = self._make_request(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 387, in _make_request\n    conn.request(method, url, **httplib_request_kw)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1285, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1331, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1280, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1040, in _send_output\n    self.send(msg)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 980, in send\n    self.connect()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 184, in connect\n    conn = self._new_conn()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 161, in _new_conn\n    raise ConnectTimeoutError(\nurllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f52251b29d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)')\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 439, in send\n    resp = conn.urlopen(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 719, in urlopen\n    retries = retries.increment(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py\", line 436, in increment\n    raise MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52251b29d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/app/httprunner/api.py\", line 61, in test\n    test_runner.run_test(teststep_dict)\n  File \"/app/httprunner/runner.py\", line 275, in run_test\n    resp = self.http_client_session.request(\n  File \"/app/httprunner/client.py\", line 156, in request\n    self.meta_data[\"response\"][\"ok\"] = response.ok\n  File \"/usr/local/lib/python3.9/site-packages/requests/models.py\", line 702, in ok\n    self.raise_for_status()\n  File \"/app/httprunner/client.py\", line 29, in raise_for_status\n    raise self.error\n  File \"/app/httprunner/client.py\", line 207, in _send_request_safe_mode\n    return requests.Session.request(self, method, url, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 533, in request\n    resp = self.send(prep, **send_kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 646, in send\n    r = adapter.send(request, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 504, in send\n    raise ConnectTimeout(e, request=request)\nrequests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52251b29d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n",
                    "meta_data": {
                      "request": {
                        "url": "http://192.168.1.4:8500/api/user/login/",
                        "method": "POST",
                        "headers": {
                          "Content-Length": "0"
                        },
                        "start_timestamp": 1704810002.72574,
                        "setup_hooks_start": 1704810002.7231643,
                        "setup_hooks_duration": 0,
                        "json": {
                          "username": "qa1",
                          "password": "gg9tKGBjK8GEgg9tKGBjK8GE"
                        },
                        "verify": false,
                        "body": null
                      },
                      "response": {
                        "status_code": "N/A",
                        "headers": {},
                        "content_size": "N/A",
                        "response_time_ms": 120003.51,
                        "elapsed_ms": 0,
                        "encoding": null,
                        "content": null,
                        "content_type": ""
                      },
                      "validators": [],
                      "logs": [
                        "INFO [2024-01-09 22:20:02,714] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:20:02,715] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:20:02,718] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:20:02,722] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:20:02,723] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:20:02,724] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:20:02,724] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:267]:  POST /api/user/login/"
                      ],
                      "extractors": []
                    }
                  },
                  {
                    "name": "登录-成功",
                    "status": "error",
                    "attachment": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 156, in _new_conn\n    conn = connection.create_connection(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 84, in create_connection\n    raise err\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 74, in create_connection\n    sock.connect(sa)\n  File \"/usr/local/lib/python3.9/site-packages/gevent/_socketcommon.py\", line 613, in connect\n    self._wait(self._write_event)\n  File \"src/gevent/_hub_primitives.py\", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 313, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 314, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_waiter.py\", line 154, in gevent._gevent_c_waiter.Waiter.get\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_gevent_c_greenlet_primitives.pxd\", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch\nsocket.timeout: timed out\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 665, in urlopen\n    httplib_response = self._make_request(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 387, in _make_request\n    conn.request(method, url, **httplib_request_kw)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1285, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1331, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1280, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1040, in _send_output\n    self.send(msg)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 980, in send\n    self.connect()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 184, in connect\n    conn = self._new_conn()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 161, in _new_conn\n    raise ConnectTimeoutError(\nurllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f5225223ee0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)')\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 439, in send\n    resp = conn.urlopen(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 719, in urlopen\n    retries = retries.increment(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py\", line 436, in increment\n    raise MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f5225223ee0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/app/httprunner/api.py\", line 61, in test\n    test_runner.run_test(teststep_dict)\n  File \"/app/httprunner/runner.py\", line 275, in run_test\n    resp = self.http_client_session.request(\n  File \"/app/httprunner/client.py\", line 156, in request\n    self.meta_data[\"response\"][\"ok\"] = response.ok\n  File \"/usr/local/lib/python3.9/site-packages/requests/models.py\", line 702, in ok\n    self.raise_for_status()\n  File \"/app/httprunner/client.py\", line 29, in raise_for_status\n    raise self.error\n  File \"/app/httprunner/client.py\", line 207, in _send_request_safe_mode\n    return requests.Session.request(self, method, url, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 533, in request\n    resp = self.send(prep, **send_kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 646, in send\n    r = adapter.send(request, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 504, in send\n    raise ConnectTimeout(e, request=request)\nrequests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f5225223ee0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n",
                    "meta_data": {
                      "request": {
                        "url": "http://192.168.1.4:8500/api/user/login/",
                        "method": "POST",
                        "headers": {
                          "Content-Length": "0"
                        },
                        "start_timestamp": 1704810122.7424827,
                        "setup_hooks_start": 1704810122.738895,
                        "setup_hooks_duration": 0,
                        "json": {
                          "username": "qa1",
                          "password": "gg9tKGBjK8GEgg9tKGBjK8GE"
                        },
                        "verify": false,
                        "body": null
                      },
                      "response": {
                        "status_code": "N/A",
                        "headers": {},
                        "content_size": "N/A",
                        "response_time_ms": 120003.81,
                        "elapsed_ms": 0,
                        "encoding": null,
                        "content": null,
                        "content_type": ""
                      },
                      "validators": [],
                      "logs": [
                        "INFO [2024-01-09 22:22:02,733] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:22:02,734] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:22:02,736] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:22:02,737] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:22:02,738] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:22:02,740] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:22:02,741] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:267]:  POST /api/user/login/"
                      ],
                      "extractors": []
                    }
                  },
                  {
                    "name": "登录-成功",
                    "status": "error",
                    "attachment": "Traceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 156, in _new_conn\n    conn = connection.create_connection(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 84, in create_connection\n    raise err\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/connection.py\", line 74, in create_connection\n    sock.connect(sa)\n  File \"/usr/local/lib/python3.9/site-packages/gevent/_socketcommon.py\", line 613, in connect\n    self._wait(self._write_event)\n  File \"src/gevent/_hub_primitives.py\", line 317, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 322, in gevent._gevent_c_hub_primitives.wait_on_socket\n  File \"src/gevent/_hub_primitives.py\", line 313, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 314, in gevent._gevent_c_hub_primitives._primitive_wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 46, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_hub_primitives.py\", line 55, in gevent._gevent_c_hub_primitives.WaitOperationsGreenlet.wait\n  File \"src/gevent/_waiter.py\", line 154, in gevent._gevent_c_waiter.Waiter.get\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 61, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_greenlet_primitives.py\", line 65, in gevent._gevent_c_greenlet_primitives.SwitchOutGreenletWithLoop.switch\n  File \"src/gevent/_gevent_c_greenlet_primitives.pxd\", line 35, in gevent._gevent_c_greenlet_primitives._greenlet_switch\nsocket.timeout: timed out\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 665, in urlopen\n    httplib_response = self._make_request(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 387, in _make_request\n    conn.request(method, url, **httplib_request_kw)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1285, in request\n    self._send_request(method, url, body, headers, encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1331, in _send_request\n    self.endheaders(body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1280, in endheaders\n    self._send_output(message_body, encode_chunked=encode_chunked)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 1040, in _send_output\n    self.send(msg)\n  File \"/usr/local/lib/python3.9/http/client.py\", line 980, in send\n    self.connect()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 184, in connect\n    conn = self._new_conn()\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connection.py\", line 161, in _new_conn\n    raise ConnectTimeoutError(\nurllib3.exceptions.ConnectTimeoutError: (<urllib3.connection.HTTPConnection object at 0x7f52252e03d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)')\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 439, in send\n    resp = conn.urlopen(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/connectionpool.py\", line 719, in urlopen\n    retries = retries.increment(\n  File \"/usr/local/lib/python3.9/site-packages/urllib3/util/retry.py\", line 436, in increment\n    raise MaxRetryError(_pool, url, error or ResponseError(cause))\nurllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52252e03d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n  File \"/app/httprunner/api.py\", line 61, in test\n    test_runner.run_test(teststep_dict)\n  File \"/app/httprunner/runner.py\", line 275, in run_test\n    resp = self.http_client_session.request(\n  File \"/app/httprunner/client.py\", line 156, in request\n    self.meta_data[\"response\"][\"ok\"] = response.ok\n  File \"/usr/local/lib/python3.9/site-packages/requests/models.py\", line 702, in ok\n    self.raise_for_status()\n  File \"/app/httprunner/client.py\", line 29, in raise_for_status\n    raise self.error\n  File \"/app/httprunner/client.py\", line 207, in _send_request_safe_mode\n    return requests.Session.request(self, method, url, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 533, in request\n    resp = self.send(prep, **send_kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/sessions.py\", line 646, in send\n    r = adapter.send(request, **kwargs)\n  File \"/usr/local/lib/python3.9/site-packages/requests/adapters.py\", line 504, in send\n    raise ConnectTimeout(e, request=request)\nrequests.exceptions.ConnectTimeout: HTTPConnectionPool(host='192.168.1.4', port=8500): Max retries exceeded with url: /api/user/login/ (Caused by ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f52252e03d0>, 'Connection to 192.168.1.4 timed out. (connect timeout=120)'))\n",
                    "meta_data": {
                      "request": {
                        "url": "http://192.168.1.4:8500/api/user/login/",
                        "method": "POST",
                        "headers": {
                          "Content-Length": "0"
                        },
                        "start_timestamp": 1704810242.7610939,
                        "setup_hooks_start": 1704810242.753581,
                        "setup_hooks_duration": 0,
                        "json": {
                          "username": "qa1",
                          "password": "gg9tKGBjK8GEgg9tKGBjK8GE"
                        },
                        "verify": false,
                        "body": null
                      },
                      "response": {
                        "status_code": "N/A",
                        "headers": {},
                        "content_size": "N/A",
                        "response_time_ms": 120002.33,
                        "elapsed_ms": 0,
                        "encoding": null,
                        "content": null,
                        "content_type": ""
                      },
                      "validators": [],
                      "logs": [
                        "INFO [2024-01-09 22:24:02,749] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_user",
                        "INFO [2024-01-09 22:24:02,750] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: qa1",
                        "INFO [2024-01-09 22:24:02,751] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:730]:  source string content: $test_password",
                        "INFO [2024-01-09 22:24:02,752] [928f39cac94d4a47a446075cc70265a4] httprunner [parser.py->parse_data:733]:  parsed string content: gg9tKGBjK8GEgg9tKGBjK8GE",
                        "INFO [2024-01-09 22:24:02,753] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:238]:  start to execute setup hooks",
                        "INFO [2024-01-09 22:24:02,755] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:240]:  execute setup hooks end",
                        "INFO [2024-01-09 22:24:02,756] [928f39cac94d4a47a446075cc70265a4] httprunner [runner.py->run_test:267]:  POST /api/user/login/"
                      ],
                      "extractors": []
                    }
                  }
                ],
                "vars_trace": [
                  {
                    "before": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "update": [],
                    "after": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "step_name": "登录-成功",
                    "step_index": 0,
                    "run_times": 1
                  },
                  {
                    "before": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "update": [],
                    "after": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "step_name": "登录-成功",
                    "step_index": 0,
                    "run_times": 2
                  },
                  {
                    "before": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "update": [],
                    "after": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "step_name": "登录-成功",
                    "step_index": 0,
                    "run_times": 3
                  },
                  {
                    "before": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "update": [],
                    "after": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "step_name": "登录-成功",
                    "step_index": 0,
                    "run_times": 4
                  },
                  {
                    "before": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "update": [],
                    "after": {
                      "22": "333",
                      "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                      "test_user": "qa1",
                      "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                      "test_user2": "qa1",
                      "test_user211": "qa1",
                      "n": null,
                      "g": "1704809762",
                      "msg": [
                        {
                          "msg": "login success"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        },
                        {
                          "msg": "用户名或密码错误"
                        }
                      ]
                    },
                    "step_name": "登录-成功",
                    "step_index": 0,
                    "run_times": 5
                  }
                ],
                "name": "登录-成功",
                "base_url": "http://192.168.1.4:8500",
                "in_out": {
                  "in": {
                    "22": "333",
                    "token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjo1LCJ1c2VybmFtZSI6InFhMSIsImV4cCI6MTcwNzQwMTc2MiwiZW1haWwiOiJxYTFAcXEuY29tIiwib3JpZ19pYXQiOjE3MDQ4MDk3NjJ9.f8PTEubluy-hfuE_GBr2rmtJtRWN793hEhi88Jlj98w",
                    "test_user": "qa1",
                    "test_password": "gg9tKGBjK8GEgg9tKGBjK8GE",
                    "test_user2": "qa1",
                    "test_user211": "qa1",
                    "n": null,
                    "g": "1704809762",
                    "msg": [
                      {
                        "msg": "login success"
                      },
                      {
                        "msg": "用户名或密码错误"
                      },
                      {
                        "msg": "用户名或密码错误"
                      },
                      {
                        "msg": "用户名或密码错误"
                      }
                    ]
                  },
                  "out": {}
                }
              }
            ],
            "html_report_name": "登录-成功"
          },
          meta_data:{
            request:{},
            response:{},
            validators:[],
            logs:[],
            extractors:[]
          },
    }
  },
  methods:{
      jsonFormat(){
        this.meta_data.request.body =JSON.stringify(this.meta_data.request.body,null,4)
        this.meta_data.request.json =JSON.stringify(this.meta_data.request.json,null,4)
      },
      onBack(){
        this.$router.back()
      },
      choseCase(index){
        this.meta_data=this.reportDetail.details[0].records[index].meta_data
      }
  },
  mounted(){
    const reportId = this.$route.params.id;
    console.log(reportId); //
    this.$api.getReport(reportId,{params: {pk: reportId}}).then(resp => {
        console.log(resp)
        this.reportDetail=resp
        this.meta_data=this.reportDetail.details[0].records[0].meta_data
        this.jsonFormat()
    })
  }
}
</script>

<style scoped>
.common-layout{
  background-image: url("@/assets/images/background.jpg");
  background-size:100%;
  background-repeat: no-repeat;
  height: 1080px;
  width: 100%;
  color: #34cdbe;
}
.header {
    background-color: rgba(255, 255, 255, 0.1);
    color: #dadee4;
    height: 40px; /* 可以根据需要调整容器高度 */
}
.header span{
    background-color: rgba(255, 255, 255, 0.1);
    color: #7fec49;
    display: flex;
    margin: 10px;
    font-size: 30px;
    justify-content: center; /* 水平居中 */
    align-items: center; /* 垂直居中 */

}


#卡片
.text {
  font-size: 14px;
}
.text-case {
  font-size: 14px;

}
.detail-card{
  width: 100%;
  height: 630px;
  margin: 10px;
  background-color: rgba(255, 255, 255, 0.1);
  color: #fffeff; 
}
.item {
  padding: 18px 0;

}

.button-item{
  justify-content: center; /* 水平居中 */
  align-items: center; /* 垂直居中 */
  margin-bottom: 10px;
  border-radius: 10px;
  background-color: #9602ff;
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
  transition: box-shadow 0.3s ease;
  cursor: pointer;
  background-color: rgba(146, 104, 237, 0.1);
  width: 97%;
  color: #f3e4e4cb;
  font-size: 25px;
  height: 50px;
}


.button-item:hover {
  box-shadow: 0 4px 12px rgba(250, 4, 4, 0.95);
}
.custom-card {
  /* background-color: #0c104c;  */
  background-color: rgba(255, 255, 255, 0.1);
  color: rgb(24, 207, 210);
  height: 100%;
}
.custom-card2 {
  /* background-color: #0c104c;  */
  background-color: rgba(255, 255, 255, 0.8);
  color: rgb(24, 207, 210);
  height: 100%;
}
.custom-card-row2 {
  /* background-color: #0c104c;  */
  background-color: rgba(255, 255, 255, 0.1);
  margin-top: 10px;
  text-align: center;
  color: rgb(242, 233, 216);
  height: 600px;
}

#框架
.el-row {
  margin-bottom: 10px;
  margin-top: 0px;
}
.el-row:last-child {
  margin-bottom: 0;
}
.el-col {
  border-radius: 4px;
}

.grid-content {
  border-radius: 4px;
  min-height: 16px;
}

#进度条
.demo-progress .el-progress--line {
  margin-bottom: 100px;
  height: 100%;
}
.detail{
  height: 500px;
  overflow-y: auto;  /* 添加垂直滚动条 */
  overflow-x:hidden;
}
</style>